Participant info

age_group N meanAge sdAge nFemale
Children 17 11.32 0.8799 8
Adolescents 29 15.37 1.518 14
Adults 46 22.11 2.36 25

Agency task: Machine selection

Model: Optimal machine choices across trials by condition and age

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: stage_2_acc ~ condition * zTrialOfCond * (zAge) + (condition * 
## Model:     zTrialOfCond | subID)
## Data: banditTask.filtered
## Df full model: 18
##                        Effect df     Chisq p.value
## 1                   condition  1 20.86 ***   <.001
## 2                zTrialOfCond  1 60.59 ***   <.001
## 3                        zAge  1      1.46    .227
## 4      condition:zTrialOfCond  1      0.08    .781
## 5              condition:zAge  1      0.21    .650
## 6           zTrialOfCond:zAge  1      1.46    .226
## 7 condition:zTrialOfCond:zAge  1      0.09    .770
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
Predictor Log-Odds SE p
intercept 2.38 0.17 <0.001
condition -0.42 0.08 <0.001
trial 0.71 0.08 <0.001
age 0.21 0.17 0.225
condition x trial -0.02 0.07 0.787
condition x age -0.03 0.07 0.647
trial x age 0.10 0.08 0.223
condition x trial x age 0.02 0.06 0.763

Plot: Proportion optimal machine selections across age groups and trials

Agency task: Agency decisions

Model: Agency decisions by VoC

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: agency ~ zVoC * zTrialOfCond * zAge + (zVoC * zTrialOfCond | 
## Model:     subID)
## Data: banditTask
## Df full model: 18
##                   Effect df      Chisq p.value
## 1                   zVoC  1 144.39 ***   <.001
## 2           zTrialOfCond  1     3.56 +    .059
## 3                   zAge  1       0.01    .906
## 4      zVoC:zTrialOfCond  1  50.21 ***   <.001
## 5              zVoC:zAge  1     4.17 *    .041
## 6      zTrialOfCond:zAge  1       2.53    .111
## 7 zVoC:zTrialOfCond:zAge  1    9.59 **    .002
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
Predictor Log-Odds SE p
intercept 0.74 0.14 <0.001
VoC 1.42 0.07 <0.001
trial 0.10 0.05 0.059
age -0.02 0.14 0.906
VoC x trial 0.33 0.04 <0.001
VoC x age 0.15 0.07 0.038
trial x age -0.09 0.05 0.108
VoC x trial x age 0.12 0.04 0.001

Model: Agency decisions when VoC = 0

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: agency ~ zAge + (1 | subID)
## Data: banditTask.vocZeroTrials
## Df full model: 3
##   Effect df Chisq p.value
## 1   zAge  1  0.00    .961
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: agency ~ zAge + (1 | subID)
##    Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
## 
##      AIC      BIC   logLik deviance df.resid 
##   4304.7   4323.7  -2149.4   4298.7     4137 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -4.2769 -0.6929  0.3759  0.6286  2.1169 
## 
## Random effects:
##  Groups Name        Variance Std.Dev.
##  subID  (Intercept) 1.24     1.113   
## Number of obs: 4140, groups:  subID, 92
## 
## Fixed effects:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  1.246212   0.124404  10.017   <2e-16 ***
## zAge        -0.006025   0.123891  -0.049    0.961    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##      (Intr)
## zAge -0.002

Plot: Sensitivity to the value of choice

Plot: Sensitivity to value of control with continuous age

Summary stats: Sensitivity to value of control

Agency decision reaction times

Model: Agency RTs by VoC

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond | 
## Model:     subID)
## Data: banditTask.RT.data
##                      Effect        df         F p.value
## 1                      zAge  1, 89.98    4.14 *    .045
## 2                   zAbsVoC  1, 90.30 16.96 ***   <.001
## 3              zTrialOfCond  1, 89.36 83.83 ***   <.001
## 4              zAge:zAbsVoC  1, 90.86      1.16    .285
## 5         zAge:zTrialOfCond  1, 89.48      0.48    .490
## 6      zAbsVoC:zTrialOfCond 1, 449.77      1.96    .162
## 7 zAge:zAbsVoC:zTrialOfCond 1, 455.28      0.01    .931
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
Predictor Estimates SE p
intercept 0.15 0.04 <0.001
age -0.08 0.04 0.042
VoC magnitude -0.02 0.01 <0.001
trial -0.13 0.01 <0.001
age x VoC magnitude -0.01 0.01 0.282
age x trial 0.01 0.01 0.489
VoC magnitude x trial -0.00 0.00 0.161
age x VoC magnitude x trial 0.00 0.00 0.931

Plot: Agency RTs by VoC

Choice preference task

Choice preference task: summary stats

Model: Choice preference task accuracy

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: correct ~ zDiff * zAge + (zDiff | subID)
## Data: rewardSense.filtered
## Df full model: 7
##       Effect df     Chisq p.value
## 1      zDiff  1 79.85 ***   <.001
## 2       zAge  1      0.78    .376
## 3 zDiff:zAge  1      1.36    .244
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

Explicit reward knowledge task

Explicit reward knowledge task: summary stats

Model: Explicit reward knowledge by age and true probabilities

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: error ~ zTrueProb * zAge + (1 | subID)
## Data: explicitKnow.filtered
##           Effect        df         F p.value
## 1      zTrueProb 1, 456.86 21.67 ***   <.001
## 2           zAge  1, 89.88      0.04    .845
## 3 zTrueProb:zAge 1, 456.86      0.36    .548
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

Plot: Explicit reward knowledge

LS0tCnRpdGxlOiAiVm9DIEFuYWx5c2VzIFBhcnQgMjogUmVncmVzc2lvbnMiCmRhdGU6IDMvMjcvMjQKb3V0cHV0OgogICAgaHRtbF9kb2N1bWVudDoKICAgICAgICBkZl9wcmludDogJ3BhZ2VkJwogICAgICAgIHRvYzogdHJ1ZQogICAgICAgIHRvY19mbG9hdDoKICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICAgICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQotLS0KYGBge3IgY2h1bmsgc2V0dGluZ3MsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgY2h1bmsgc2V0dGluZ3MKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UpCmtuaXRyOjpvcHRzX2NodW5rJHNldChkcGk9NjAwKQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9IHJwcm9qcm9vdDo6ZmluZF9yc3R1ZGlvX3Jvb3RfZmlsZSgpKQpgYGAKICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCiMgbGlzdCBhbGwgcGFja2FnZXMgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcwpsaXN0X29mX3BhY2thZ2VzIDwtIGMoInRpZHl2ZXJzZSIsICJhZmV4IiwgInBhbmRlciIsICJzalBsb3QiKQoKIyBsb2FkIGFsbCBwYWNrYWdlcyAKbGFwcGx5KGxpc3Rfb2ZfcGFja2FnZXMsIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKCiMgYWRkIHRoZW1lIGZvciBwbG90dGluZwp2b2NfdGhlbWUgPC0gZnVuY3Rpb24gKCkgewogIHRoZW1lKAogICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSAidHJhbnNwYXJlbnQiLCBjb2xvcj0iZ3JheTc1IiksCiAgICBwYW5lbC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsPSJ0cmFuc3BhcmVudCIsIGNvbG91cj1OQSksCiAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9yZWN0KGZpbGw9InRyYW5zcGFyZW50IiwgY29sb3VyPU5BKSwKICAgIGxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKGNvbG9yPSJncmF5NzUiKSwKICAgIHRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseT0iQXZlbmlyIiksCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwKICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwKICAgIHRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksCiAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKQogICkKfQoKY29sb3IxID0gIiMwMGI0ZDgiCmNvbG9yMiA9ICIjMDA3N2I2Igpjb2xvcjMgPSAiIzAzMDQ1ZSIKCgojei1zY29yZSBmdW5jdGlvbgpzY2FsZV90aGlzIDwtIGZ1bmN0aW9uKHgpewogICh4IC0gbWVhbih4LCBuYS5ybT1UUlVFKSkgLyBzZCh4LCBuYS5ybT1UUlVFKQp9CgpgYGAKCiMgUGFydGljaXBhbnQgaW5mbwpgYGB7ciBwYXJ0aWNpcGFudHMgcGxvdH0KCiNsb2FkIGRlbW9ncmFwaGljIGluZm8Kc3ViX2luZm8gPC0gcmVhZF9jc3YoJ2RhdGEvdm9jX3N1Yl9pbmZvLmNzdicpIAoKIyBwbG90IGhpc3RvZ3JhbSBvZiBtYWxlIGFuZCBmZW1hbGUgcGFydGljaXBhbnRzCnN1Yl9pbmZvICU+JSBtdXRhdGUod2hvbGVfYWdlID0gZmxvb3IoYWdlKSkgJT4lIAogICAgZ3JvdXBfYnkoc3ViSUQsIGdlbmRlciwgd2hvbGVfYWdlKSAlPiUgCiAgICBkaXN0aW5jdChzdWJJRCkgJT4lIAogICAgZ2dwbG90KC4sIGFlcyh4PXdob2xlX2FnZSwgZmlsbD1nZW5kZXIpKSArCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEsIGNvbG9yPSJ3aGl0ZSIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IlNleCIsCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoIkZlbWFsZSIsICJNYWxlIiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjIpKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygyLDQsNiw4LDEwKSwKICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjIiLCI0IiwiNiIsIjgiLCIxMCIpLAogICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLDEwKSkgKwogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiQ291bnQiKSArCiAgICB2b2NfdGhlbWUoKQpgYGAKCmBgYHtyIHBhcnRpY2lwYW50IGluZm99CgojbG9hZCBkZW1vZ3JhcGhpYyBpbmZvCnN1Yl9pbmZvIDwtIHJlYWRfY3N2KCdkYXRhL3ZvY19zdWJfaW5mby5jc3YnKSAlPiUKICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oYWdlIDwgMTMgfiAiQ2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPiAxMi45OSAmIGFnZSA8IDE4IH4gIkFkb2xlc2NlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTcuOTkgfiAiQWR1bHRzIikpCgpzdWJfaW5mbyRhZ2VfZ3JvdXAgPC0gZmFjdG9yKHN1Yl9pbmZvJGFnZV9ncm91cCwgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgojIGFnZSBncm91cCBpbmZvcm1hdGlvbgphZ2VfZ3JvdXBfaW5mbyA8LSBzdWJfaW5mbyAlPiUKICAgIGdyb3VwX2J5KGFnZV9ncm91cCkgJT4lCiAgICBzdW1tYXJpemUoTiA9IG4oKSwgCiAgICAgICAgICAgICAgbWVhbkFnZSA9IG1lYW4oYWdlKSwKICAgICAgICAgICAgICBzZEFnZSA9IHNkKGFnZSksCiAgICAgICAgICAgICAgbkZlbWFsZSA9IHN1bShnZW5kZXIgPT0gIkYiKQogICAgICAgICAgICAgICkKCnBhbmRlcihhZ2VfZ3JvdXBfaW5mbykKYGBgCgoKIyBBZ2VuY3kgdGFzazogTWFjaGluZSBzZWxlY3Rpb24KIyMgTW9kZWw6IE9wdGltYWwgbWFjaGluZSBjaG9pY2VzIGFjcm9zcyB0cmlhbHMgYnkgY29uZGl0aW9uIGFuZCBhZ2UKYGBge3IgbWFjaGluZSBjaG9pY2VzIGFjcm9zcyB0cmlhbHMgYnkgYWdlfQoKIyBSZWFkIGluIGRhdGEKYmFuZGl0VGFzayA8LSByZWFkX2NzdignZGF0YS9wcm9jZXNzZWQvYmFuZGl0X3Rhc2suY3N2JykgCgojY29tYmluZSB3aXRoIHBhcnRpY2lwYW50IGFnZQpiYW5kaXRUYXNrIDwtIGZ1bGxfam9pbihiYW5kaXRUYXNrLCBzdWJfaW5mbywgYnkgPSBjKCJzdWJJRCIpKQoKIyBGaWx0ZXIgZGF0YSB0byBoYXZlIG9ubHkgdHJpYWxzIHdoZXJlIHBlb3BsZSBjaG9vc2UgYWdlbmN5IGFuZCBleGNsdWRlIHRyaWFscyB3aXRoIDUwLTUwIGNvbmRpdGlvbiAKYmFuZGl0VGFzay5maWx0ZXJlZCA8LSBiYW5kaXRUYXNrICU+JSAKICAgIGZpbHRlcihhZ2VuY3kgPT0gMSwgY29uZGl0aW9uIT0iYmFuZGl0czUwNTAiKQoKIyBTY2FsZSBjb250aW51b3VzIHZhcmlhYmxlcwpiYW5kaXRUYXNrLmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGVfdGhpcyhiYW5kaXRUYXNrLmZpbHRlcmVkJGFnZSkKYmFuZGl0VGFzay5maWx0ZXJlZCR6VHJpYWxPZkNvbmQgPC0gc2NhbGVfdGhpcyhiYW5kaXRUYXNrLmZpbHRlcmVkJHRyaWFsT2ZDb25kKQoKIyBNaXhlZC1lZmZlY3RzIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwKY29ycmVjdF9ieUNvbmRpdGlvblRyaWFsQWdlLm1peGVkIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gY29uZGl0aW9uKnpUcmlhbE9mQ29uZCooekFnZSkgKyAoY29uZGl0aW9uKnpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suZmlsdGVyZWQsCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCwgCiAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSkKCiNkaXNwbGF5IG1vZGVsIHN0YXRzCmNvcnJlY3RfYnlDb25kaXRpb25UcmlhbEFnZS5taXhlZCAKYGBgCgpgYGB7ciBtYWNoaW5lIG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKY29ycmVjdF9ieUNvbmRpdGlvblRyaWFsQWdlLmdsbWVyIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gY29uZGl0aW9uKnpUcmlhbE9mQ29uZCooekFnZSkgKyAoY29uZGl0aW9uKnpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suZmlsdGVyZWQsCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCwgCiAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSwgCiAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChjb3JyZWN0X2J5Q29uZGl0aW9uVHJpYWxBZ2UuZ2xtZXIsIAogICAgICAgICAgcHJlZC5sYWJlbHMgPSBjKCJpbnRlcmNlcHQiLCAiY29uZGl0aW9uIiwgInRyaWFsIiwgImFnZSIsICJjb25kaXRpb24geCB0cmlhbCIsICJjb25kaXRpb24geCBhZ2UiLCAidHJpYWwgeCBhZ2UiLCAiY29uZGl0aW9uIHggdHJpYWwgeCBhZ2UiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5zdGF0ID0gRiwKICAgICAgICAgIHNob3cuY2kgPSBGLAogICAgICAgICAgc2hvdy5yZS52YXIgPSBGLAogICAgICAgICAgc2hvdy5pY2MgPSBGLAogICAgICAgICAgc2hvdy5uZ3JvdXBzID0gRiwKICAgICAgICAgIHNob3cub2JzID0gRiwKICAgICAgICAgIHNob3cucjIgPSBGLAogICAgICAgICAgc3RyaW5nLnNlID0gIlNFIiwKICAgICAgICAgIGVtcGgucCA9IEYsCiAgICAgICAgICBzdHJpbmcucHJlZCA9ICJQcmVkaWN0b3IiLAogICAgICAgICAgdGl0bGUgPSAiIiwKICAgICAgICAgIGR2LmxhYmVscyA9ICIiKQpgYGAKCiMjIFBsb3Q6IFByb3BvcnRpb24gb3B0aW1hbCBtYWNoaW5lIHNlbGVjdGlvbnMgYWNyb3NzIGFnZSBncm91cHMgYW5kIHRyaWFscwpgYGB7ciBwbG90IGJhbmRpdCBjaG9pY2VzIGFjcm9zcyB0cmlhbHMsIHdpZHRoID0gNywgaGVpZ2h0ID0gNCwgdW5pdCA9ICJpbiJ9CgpiYW5kaXRUYXNrU3ViTWVhbnMgPC0gYmFuZGl0VGFzayAlPiUKICAgIG11dGF0ZShibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSkgKyAxKSAlPiUKICAgIGZpbHRlcihhZ2VuY3k9PTEsIGNvbmRpdGlvbiE9ImJhbmRpdHM1MDUwIikgJT4lIAogICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBibG9jaywgYWdlX2dyb3VwLCBzdWJJRCkgJT4lIAogICAgc3VtbWFyaXplKHBjdENvcnJlY3QgPSBtZWFuKHN0YWdlXzJfYWNjKSkKCmJhbmRpdFRhc2tNZWFucyA8LSBiYW5kaXRUYXNrU3ViTWVhbnMgJT4lCiAgICBncm91cF9ieShjb25kaXRpb24sIGJsb2NrLCBhZ2VfZ3JvdXApICU+JSAKICAgIHN1bW1hcml6ZShwY3RDb3JyID0gbWVhbihwY3RDb3JyZWN0KSwKICAgICAgICAgICAgICBzZSA9IHNkKHBjdENvcnJlY3QpL3NxcnQobigpKSkKCm1hY2hpbmVTZWxlY3Rpb25QbG90IDwtIGdncGxvdChiYW5kaXRUYXNrTWVhbnMsIGFlcyh4PWJsb2NrLCB5PXBjdENvcnIsIGNvbG9yPWNvbmRpdGlvbikpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMykgKwogICAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGJhbmRpdFRhc2tTdWJNZWFucywgIGFlcyh4ID0gYmxvY2ssIHkgPSBwY3RDb3JyZWN0LCBjb2xvcj1jb25kaXRpb24pLCBzaXplID0gLjUpICsKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFlcyhmaWxsID0gY29uZGl0aW9uKSkgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLjUsIGxpbmV0eXBlPSJkYXNoZWQiKSArCiAgICB5bGFiKCJQcm9wb3J0aW9uIE9wdGltYWwgTWFjaGluZSBTZWxlY3Rpb25zIikgKwogICAgeGxhYigiQmxvY2siKSArCiAgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0LCA4LCAxMikpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IkNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiNzAvMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkwLzEwIiksCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9Yyhjb2xvcjEsIGNvbG9yMyksIAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZT1UUlVFKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWU9IkNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiNzAvMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkwLzEwIiksCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9Yyhjb2xvcjEsIGNvbG9yMyksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2U9VFJVRSkpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpCm1hY2hpbmVTZWxlY3Rpb25QbG90CmBgYAoKCiMgQWdlbmN5IHRhc2s6IEFnZW5jeSBkZWNpc2lvbnMgCiMjIE1vZGVsOiBBZ2VuY3kgZGVjaXNpb25zIGJ5IFZvQwpgYGB7ciB2b2MgbW9kZWx9Cgojc2NhbGUgdmFyaWFibGVzCmJhbmRpdFRhc2skelZvQyA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skdm9jKQpiYW5kaXRUYXNrJHpUcmlhbE9mQ29uZCA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skdHJpYWxPZkNvbmQpCmJhbmRpdFRhc2skekFnZSA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skYWdlKQoKIyBwcmVkaWN0IGFnZW5jeSBjaG9pY2UgZnJvbSB1dGlsaXR5IG9mIGNvbnRyb2wsIHRyaWFsLCBsaW5lYXIgYWdlCmFnZW5jeV9ieVZPQ1RyaWFsQWdlLm1peGVkID0gbWl4ZWQoYWdlbmN5IH4gelZvQyAqIHpUcmlhbE9mQ29uZCAqIHpBZ2UgKyAoelZvQyAqIHpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzaywgCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIixvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKSAKCiNkaXNwbGF5IHN0YXRzCmFnZW5jeV9ieVZPQ1RyaWFsQWdlLm1peGVkCmBgYAoKYGBge3IgYWdlbmN5IG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKYWdlbmN5X2J5Vk9DVHJpYWxBZ2UuZ2xtZXIgPSBtaXhlZChhZ2VuY3kgfiB6Vm9DICogelRyaWFsT2ZDb25kICogekFnZSArICh6Vm9DICogelRyaWFsT2ZDb25kfHN1YklEKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKSAKCnRhYl9tb2RlbChhZ2VuY3lfYnlWT0NUcmlhbEFnZS5nbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJWb0MiLCAidHJpYWwiLCAiYWdlIiwgIlZvQyB4IHRyaWFsIiwgIlZvQyB4IGFnZSIsICJ0cmlhbCB4IGFnZSIsICJWb0MgeCB0cmlhbCB4IGFnZSIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBGLAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKIyMgTW9kZWw6IEFnZW5jeSBkZWNpc2lvbnMgd2hlbiBWb0MgPSAwCmBgYHtyIHZvYyAwIG1vZGVsfQoKI2ZpbHRlciBkYXRhCmJhbmRpdFRhc2sudm9jWmVyb1RyaWFscyA8LSBiYW5kaXRUYXNrICU+JQogICAgZmlsdGVyKHZvYyA9PSAwKQoKI3NjYWxlIGFnZQpiYW5kaXRUYXNrLnZvY1plcm9UcmlhbHMkekFnZSA8LSBzY2FsZShiYW5kaXRUYXNrLnZvY1plcm9UcmlhbHMkYWdlKQoKIyBwcmVkaWN0IGFnZW5jeSBjaG9pY2UgZnJvbSB1dGlsaXR5IG9mIGNvbnRyb2wsIHRyaWFsLCBsaW5lYXIgYWdlCmFnZW5jeV92b2NaZXJvX2J5QWdlLm1peGVkID0gbWl4ZWQoYWdlbmN5IH4gIHpBZ2UgKyAoMXxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzay52b2NaZXJvVHJpYWxzLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKSAKCiNkaXNwbGF5IHN0YXRzCmFnZW5jeV92b2NaZXJvX2J5QWdlLm1peGVkCnN1bW1hcnkoYWdlbmN5X3ZvY1plcm9fYnlBZ2UubWl4ZWQpCmBgYAoKCiMjIFBsb3Q6IFNlbnNpdGl2aXR5IHRvIHRoZSB2YWx1ZSBvZiBjaG9pY2UKYGBge3Igdm9jIHBsb3QsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA3LCB1bml0ID0gImluIn0KClZvQ19wbG90X3N1Yl9tZWFucyA8LSBiYW5kaXRUYXNrICU+JSAKICAgIG11dGF0ZSh0YXNrSGFsZiA9IGNhc2Vfd2hlbih0cmlhbCA8IDE1OCB+ICJGaXJzdCBIYWxmIG9mIFRhc2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFsID4gMTU3IH4gIlNlY29uZCBIYWxmIG9mIFRhc2siKSkgJT4lCiAgICBncm91cF9ieShhZ2VfZ3JvdXAsIHRhc2tIYWxmLCB2b2MsIHN1YklEKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViQWdlbmN5ID0gbWVhbihhZ2VuY3ksIG5hLnJtID0gVCkpCgpWb0NfcGxvdF9tZWFucyA8LSBWb0NfcGxvdF9zdWJfbWVhbnMgJT4lIAogICAgZ3JvdXBfYnkoYWdlX2dyb3VwLCB0YXNrSGFsZiwgdm9jKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuQWdlbmN5ID0gbWVhbihtZWFuU3ViQWdlbmN5LCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNlQWdlbmN5ID0gc2QobWVhblN1YkFnZW5jeSAvIHNxcnQobigpKSkpCgojcGxvdApWb0NfcGxvdCA8LSBnZ3Bsb3QoVm9DX3Bsb3RfbWVhbnMsIGFlcyh4ID0gdm9jLCB5ID0gbWVhbkFnZW5jeSwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgICBmYWNldF93cmFwKH50YXNrSGFsZikgKwogICAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhZ2VfZ3JvdXApKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoY29sb3IgPSBhZ2VfZ3JvdXAsIHltaW4gPSBtZWFuQWdlbmN5IC0gc2VBZ2VuY3ksIHltYXggPSBtZWFuQWdlbmN5ICsgc2VBZ2VuY3kpLCB3aWR0aCA9IC4xKSArIAogICAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGFnZV9ncm91cCkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzcwMjk2MyIsICIjYzAwMDAwIiwgIiNmZmFlNDIiKSwgbmFtZSA9ICJBZ2UgR3JvdXAiKSArCiAgICB4bGFiKCJWYWx1ZSBvZiBDaG9pY2UgKFZvQykiKSArCiAgICB5bGFiKCJQcm9wb3J0aW9uIEFnZW5jeSBDaG9pY2VzIikgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLjUsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICAgIHZvY190aGVtZSgpClZvQ19wbG90CmBgYAoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY29udHJvbCB3aXRoIGNvbnRpbnVvdXMgYWdlIApgYGB7ciB2b2MgcGxvdCBjb250aW51b3VzIGFnZSwgZmlnLmhlaWdodCA9IDMuOSwgZmlnLndpZHRoID0gMywgdW5pdCA9ICJpbiJ9CgojcnVuIG1vZGVsIHdpdGhvdXQgYWdlIHRvIGdldCByYW5kb20gZWZmZWN0cyBmb3IgZWFjaCBwYXJ0aWNpcGFudAphZ2VuY3lfYnlWT0NUcmlhbC5nbG1lciA9IG1peGVkKGFnZW5jeSB+IHpWb0MgKiB6VHJpYWxPZkNvbmQgKyAoelZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YklEKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKSAKCiNnZXQgZml4ZWQgZWZmZWN0IG9mIHpWb0MKVm9DX2ZpeGVkZWZmIDwtIGFzLmRhdGEuZnJhbWUoY29lZihzdW1tYXJ5KGFnZW5jeV9ieVZPQ1RyaWFsLmdsbWVyKSkpJEVzdGltYXRlWzJdClZvQ19pbnRfZml4ZWRlZmYgPC0gYXMuZGF0YS5mcmFtZShjb2VmKHN1bW1hcnkoYWdlbmN5X2J5Vk9DVHJpYWwuZ2xtZXIpKSkkRXN0aW1hdGVbNF0KCiNnZXQgcmFuZG9tIGVmZmVjdHMKVm9DX2VmZmVjdHMgPC0gcmFuZWYoYWdlbmN5X2J5Vk9DVHJpYWwuZ2xtZXIpJHN1YklEICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJJRCIpCgojY29tYmluZSB3aXRoIGFnZQpWb0Nfc3ViRWZmZWN0cyA8LSBiYW5kaXRUYXNrICU+JQogICAgc2VsZWN0KHN1YklELCBhZ2UpICU+JSAKICAgIHVuaXF1ZSgpICU+JQogICAgbGVmdF9qb2luKFZvQ19lZmZlY3RzLCBieSA9IGMoInN1YklEIikpICU+JQogICAgbXV0YXRlKHpWb0NGdWxsID0gelZvQyArIFZvQ19maXhlZGVmZiwgCiAgICAgICAgICAgaW50RnVsbCA9IGB6Vm9DOnpUcmlhbE9mQ29uZGAgKyBWb0NfaW50X2ZpeGVkZWZmKQoKI3Bsb3QgYWdlIGJ5IFZvQyBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZSA8LSBnZ3Bsb3QoVm9DX3N1YkVmZmVjdHMsIGFlcyh4ID0gYWdlLCB5ID0gelZvQ0Z1bGwpKSArCiAgICBnZW9tX3BvaW50KGNvbG9yID0gImJsYWNrIikgKyAKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJibGFjayIpICsKICAgIHZvY190aGVtZSgpICsgCiAgICB4bGFiKCJBZ2UiKSArCiAgICB5bGFiKCJWb0MgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2UKCiNwbG90IGFnZSBieSBWb0MgeCB0cmlhbCBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZVRyaWFsIDwtIGdncGxvdChWb0Nfc3ViRWZmZWN0cywgYWVzKHggPSBhZ2UsIHkgPSBpbnRGdWxsKSkgKwogICAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIpICsgCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siKSArCiAgICB2b2NfdGhlbWUoKSArIAogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiVm9DIHggVHJpYWwgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2VUcmlhbApgYGAKCgojIyBTdW1tYXJ5IHN0YXRzOiBTZW5zaXRpdml0eSB0byB2YWx1ZSBvZiBjb250cm9sCmBgYHtyIHZvYyBzdW1tYXJ5IHN0YXRzfQoKIyBXaGF0IHByb3BvcnRpb24gb2YgdHJpYWxzIGRpZCBwYXJ0aWNpcGFudHMgY2hvb3NlIGFnZW5jeSB3aGVuIFZvQyB3YXMgMD8KVm9DX3plcm9fbWVhbnNfc3ViIDwtIGJhbmRpdFRhc2sgJT4lIAogICAgZmlsdGVyKHZvYyA9PSAwKSAlPiUKICAgIGdyb3VwX2J5KHN1YklELCBhZ2VfZ3JvdXApICU+JQogICAgc3VtbWFyaXplKG1lYW5TdWJBZ2VuY3kgPSBtZWFuKGFnZW5jeSwgbmEucm0gPSBUKSkKClZvQ196ZXJvX21lYW5zIDwtIFZvQ196ZXJvX21lYW5zX3N1YiAlPiUKICAgIHN1bW1hcml6ZShtZWFuQWdlbmN5ID0gbWVhbihtZWFuU3ViQWdlbmN5LCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNlQWdlbmN5ID0gc2QobWVhblN1YkFnZW5jeSAvIHNxcnQobigpKSkpClZvQ196ZXJvX21lYW5zCmBgYAoKCiMjIEFnZW5jeSBkZWNpc2lvbiByZWFjdGlvbiB0aW1lcwpgYGB7ciBhZ2VuY3kgUlQgZGF0YSBwcm9jZXNzaW5nfQoKI2hvdyBtYW55IFJUcyBmYXN0ZXIgdGhhbiAxMDAgbXM/CmZhc3RSVHMgPC0gYmFuZGl0VGFzayAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA8IC4xKSAlPiUKICAgIG5yb3coKQoKIzQ4NiBvdXQgb2YgMjg5ODAgdHJpYWxzICgxLjclKSBvZiBhZ2VuY3kgUlRzIGFyZSBmYXN0IC0gZXhjbHVkZQoKc2xvd1JUcyA8LSBiYW5kaXRUYXNrICU+JQogICAgZmlsdGVyKGFnZW5jeVJUID4gMzApICU+JQogICAgbnJvdygpCgojMTQgb3V0IG9mIDI4OTgwIHRyaWFscyAoPCAxJSkgb2YgYWdlbmN5IFJUcyBhcmUgdmVyeSBzbG93IC0gZXhjbHVkZQoKYmFuZGl0VGFzay5SVC5kYXRhIDwtIGJhbmRpdFRhc2sgJT4lCiAgICBmaWx0ZXIoYWdlbmN5UlQgPiAuMSkgJT4lCiAgICBmaWx0ZXIoYWdlbmN5UlQgPCAzMCkgJT4lCiAgICBtdXRhdGUoYWdlbmN5TG9nUlQgPSBsb2coYWdlbmN5UlQpKQpgYGAKCiMjIE1vZGVsOiBBZ2VuY3kgUlRzIGJ5IFZvQwpgYGB7ciB2b2MgUlQgbW9kZWx9CgojY29tcHV0ZSBhYnModm9jKSB2YXJpYWJsZQpiYW5kaXRUYXNrLlJULmRhdGEkYWJzVm9DIDwtIGFicyhiYW5kaXRUYXNrLlJULmRhdGEkdm9jKQoKI3NjYWxlIHZhcmlhYmxlcwpiYW5kaXRUYXNrLlJULmRhdGEkekFnZSA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkYWdlKQpiYW5kaXRUYXNrLlJULmRhdGEkelZvQyA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkdm9jKQpiYW5kaXRUYXNrLlJULmRhdGEkekFic1ZvQyA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkYWJzVm9DKQpiYW5kaXRUYXNrLlJULmRhdGEkelRyaWFsT2ZDb25kIDwtIHNjYWxlKGJhbmRpdFRhc2suUlQuZGF0YSR0cmlhbE9mQ29uZCkKCmFnZW5jeS5SVC5tb2RlbCA8LSBtaXhlZChhZ2VuY3lMb2dSVCB+IHpBZ2UgKiB6QWJzVm9DICogelRyaWFsT2ZDb25kICsgKHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgfCBzdWJJRCksCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzay5SVC5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9bG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKQoKYWdlbmN5LlJULm1vZGVsCgojZWZmZWN0cyBvZgojIGFnZQojIFZvQwojIHRyaWFsIG9mIGNvbmRpdGlvbgoKI25vIGludGVyYWN0aW9ucwpgYGAKCmBgYHtyIGFnZW5jeSBSVHMgcHJpbnQgbW9kZWwgc3RhdHN9CmFnZW5jeS5SVC5sbWVyIDwtIG1peGVkKGFnZW5jeUxvZ1JUIH4gekFnZSAqIHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgKyAoekFic1ZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YklEKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLlJULmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGFnZW5jeS5SVC5sbWVyLCAKICAgICAgICAgIHByZWQubGFiZWxzID0gYygiaW50ZXJjZXB0IiwgImFnZSIsICJWb0MgbWFnbml0dWRlIiwgInRyaWFsIiwgImFnZSB4IFZvQyBtYWduaXR1ZGUiLCAiYWdlIHggdHJpYWwiLCAiVm9DIG1hZ25pdHVkZSB4IHRyaWFsIiwgImFnZSB4IFZvQyBtYWduaXR1ZGUgeCB0cmlhbCIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBGLAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKCiMjIFBsb3Q6IEFnZW5jeSBSVHMgYnkgVm9DCmBgYHtyIGFnZW5jeSBSVCBieSBWb0MsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA4LCB1bml0cyA9ICJpbiJ9CgphZ2VuY3lSVC5tZWFucy5zdWIgPC0gYmFuZGl0VGFzay5SVC5kYXRhICU+JQogICAgZ3JvdXBfYnkodm9jLCBhZ2VfZ3JvdXAsIHN1YklEKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViUlQgPSBtZWFuKGFnZW5jeVJUKSwKICAgICAgICAgICAgICBtZWFuU3ViTG9nUlQgPSBtZWFuKGFnZW5jeUxvZ1JUKSkKCiNjb21wdXRlIG1lYW5zIGFuZCBTRHMKYWdlbmN5UlQubWVhbnMgPC0gYWdlbmN5UlQubWVhbnMuc3ViICAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuUlQgPSBtZWFuKG1lYW5TdWJSVCksCiAgICAgICAgICAgICAgbWVhbkxvZ1JUID0gbWVhbihtZWFuU3ViTG9nUlQpLAogICAgICAgICAgICAgIHNlUlQgPSBzZChtZWFuU3ViUlQpLyBzcXJ0KG4oKSksCiAgICAgICAgICAgICAgc2VMb2dSVCA9IHNkKG1lYW5TdWJMb2dSVCkvIHNxcnQobigpKSkKCmFnZW5jeVJULlZvQy5wbG90IDwtIGdncGxvdChhZ2VuY3lSVC5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IHZvYywgeSA9IG1lYW5SVCkpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMywgYWVzKGNvbG9yPSBhZ2VfZ3JvdXApKSArCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhblJUIC0gc2VSVCwgeW1heCA9IG1lYW5SVCArIHNlUlQsIGNvbG9yID0gYWdlX2dyb3VwKSwgd2lkdGggPSAuMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMykpICsKICAgIHhsYWIoIlZhbHVlIG9mIENob2ljZSIpICsKICAgICB5bGFiKCJNZWFuIEFnZW5jeSBEZWNpc2lvbiBUaW1lIChzKSIpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYWdlbmN5UlQuVm9DLnBsb3QKYGBgCgojIENob2ljZSBwcmVmZXJlbmNlIHRhc2sgCiMjIENob2ljZSBwcmVmZXJlbmNlIHRhc2s6IHN1bW1hcnkgc3RhdHMKYGBge3IgcmV3YXJkIHNlbnNlIHN1bW1hcnkgc3RhdHN9CgojIFJlYWQgaW4gZGF0YQpyZXdhcmRTZW5zZSA8LSByZWFkX2NzdignZGF0YS9wcm9jZXNzZWQvcmV3YXJkX3NlbnNpdGl2aXR5X3Rhc2suY3N2JykgCgojY29tYmluZSB3aXRoIGFnZQpyZXdhcmRTZW5zZSA8LSBmdWxsX2pvaW4ocmV3YXJkU2Vuc2UsIHN1Yl9pbmZvLCBieSA9IGMoInN1YklEIikpCgojIHN1bW1hcnkgc3RhdHMgZm9yIGFjY3VyYWN5Cm92ZXJhbGxBY2MgPC0gcmV3YXJkU2Vuc2UgJT4lIAogICAgZ3JvdXBfYnkoc3ViSUQpICU+JSAKICAgIGZpbHRlcihhY2N1cmFjeSE9MCkgJT4lIAogICAgc3VtbWFyaXplKG09bWVhbihjb3JyZWN0LCBuYS5ybT1UKSkgJT4lIAogICAgdW5ncm91cCgpICU+JSAKICAgIHN1bW1hcml6ZShtZWFuQWNjdXJhY3kgPSBtZWFuKG0pLCBzdGRldiA9IHNkKG0pKQpvdmVyYWxsQWNjCgojIG1lYW4gPSA3Ni45JQojIHN0ZGV2ID0gMTUuMyUKYGBgCgojIyBNb2RlbDogQ2hvaWNlIHByZWZlcmVuY2UgdGFzayBhY2N1cmFjeQpgYGB7ciBiYW5kaXQgY2hvaWNlcyBhY3Jvc3MgYnkgYWdlIGluIHBvc3QtdGFzayBhc3Nlc3NtZW50fQoKIyBmaXJzdCwgZmlsdGVyIGRhdGEgYW5kIHJlc2NhbGUgdmFyaWFibGVzCnJld2FyZFNlbnNlLmZpbHRlcmVkIDwtIHJld2FyZFNlbnNlICU+JSAgCiAgICBmaWx0ZXIoYWNjdXJhY3khPTApCgojIHJlc2NhbGUgdmFyaWFibGVzIG9mIGFnZSBhbmQgdGhlIHRydWUgcHJvYmFiaWxpdHkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gZGlzcGxheWVkIGJhbmRpdHMgCnJld2FyZFNlbnNlLmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGUocmV3YXJkU2Vuc2UuZmlsdGVyZWQkYWdlKQpyZXdhcmRTZW5zZS5maWx0ZXJlZCR6RGlmZjwtIHNjYWxlKHJld2FyZFNlbnNlLmZpbHRlcmVkJGRpZmYpCgojIHJ1biBtb2RlbApyZXdhcmRTZW5zZS5taXhlZCA8LSBtaXhlZChjb3JyZWN0fnpEaWZmKnpBZ2UgKyAoekRpZmZ8c3ViSUQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT0gcmV3YXJkU2Vuc2UuZmlsdGVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIikKcmV3YXJkU2Vuc2UubWl4ZWQgCmBgYAoKCiMgRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSB0YXNrIAojIyBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlIHRhc2s6IHN1bW1hcnkgc3RhdHMKYGBge3IgZXhwbGljaXQga25vd2xlZGdlIHRhc2t9CgojIFJlYWQgaW4gZGF0YQpleHBsaWNpdEtub3cgPC0gcmVhZF9jc3YoJ2RhdGEvcHJvY2Vzc2VkL2V4cGxpY2l0X2tub3dsZWRnZV90YXNrLmNzdicpIAoKI2NvbWJpbmUgd2l0aCBhZ2UKZXhwbGljaXRLbm93IDwtIGZ1bGxfam9pbihleHBsaWNpdEtub3csIHN1Yl9pbmZvLCBieSA9IGMoInN1YklEIikpCgpleHBsaWNpdEtub3cgJT4lIAogIGdyb3VwX2J5KHN1YklELCBhZ2UpICU+JSAKICBzdW1tYXJpemUobSA9IG1lYW4oZXJyb3IpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpemUobWVhbkVyciA9IG1lYW4obSwgbmEucm09VCksIHNkID0gc2QobSxuYS5ybSA9IFQpKQpgYGAKCiMjIE1vZGVsOiBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlIGJ5IGFnZSBhbmQgdHJ1ZSBwcm9iYWJpbGl0aWVzCmBgYHtyIGV4cGxpY2l0IGtub3dsZWRnZSBtb2RlbH0KIyBwcmVkaWN0IHRyaWFsLWxldmVsIGVycm9yIGZyb20gdHJ1ZSBwcm9iYWJpbGl0eSBhbmQgYWdlCgojcmUtc2NhbGUgYWdlIGFuZCB6VHJ1ZVByb2IKZXhwbGljaXRLbm93LmZpbHRlcmVkIDwtIGV4cGxpY2l0S25vdyAlPiUKICAgIHNlbGVjdChzdWJJRCwgYWdlLCB0cnVlUHJvYiwgcmVzcG9uc2UsIGVycm9yKSAlPiUKICAgIGRyb3BfbmEoKQoKZXhwbGljaXRLbm93LmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGUoZXhwbGljaXRLbm93LmZpbHRlcmVkJGFnZSkKZXhwbGljaXRLbm93LmZpbHRlcmVkJHpUcnVlUHJvYiA8LSBzY2FsZShleHBsaWNpdEtub3cuZmlsdGVyZWQkdHJ1ZVByb2IpCgojIHJ1biBtb2RlbApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkIDwtIG1peGVkKGVycm9yIH4gelRydWVQcm9iKnpBZ2UgKyAoMXxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBleHBsaWNpdEtub3cuZmlsdGVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKSAKZXhwbGljaXRLbm93X2Vycm9yYnlUcnVlUHJvYkFnZS5taXhlZApgYGAKCiMjIFBsb3Q6IEV4cGxpY2l0IHJld2FyZCBrbm93bGVkZ2UKYGBge3IgcGxvdCBleHBsaWNpdCBrbm93bGVkZ2V9CiMgcGxvdCByZXNwb25zZSBieSBiYW5kaXQKZXhwbGljaXRLbm93ICU+JSAKICAgIGdncGxvdCguLCBhZXMoeD1mYWN0b3IodHJ1ZVByb2IpLCB5PXJlc3BvbnNlLCBmaWxsPWFnZV9ncm91cCkpICsKICAgIGdlb21fYm94cGxvdCgpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMyksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogICAgeWxhYigiUmVwb3J0ZWQgUmV3YXJkIFByb2JhYmlsaXR5IikgKwogICAgeGxhYigiVHJ1ZSBSZXdhcmQgUHJvYmFiaWxpdHkiKSArCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIjEwJSIsICIzMCUiLCAiNTAlIiwgIjcwJSIsICI5MCUiKSkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxMCUiLCAiMjAlIiwgIjMwJSIsICI0MCUiLCAiNTAlIiwgIjYwJSIsICI3MCUiLCAiODAlIiwgIjkwJSIpKSArCiAgICB2b2NfdGhlbWUoKQpgYGAK